import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:ui' as ui;

/// 语言管理器单例类
/// 负责管理应用的语言设置，包括获取系统语言、本地存储和读取语言配置
class LanguageManager {
  static LanguageManager? _instance;
  static const String _languageKey = 'app_language';

  // 当前语言代码
  String _currentLanguage = 'en';

  // 当前Locale对象
  Locale _currentLocale = const Locale('en', 'US');

  // 支持的语言列表
  static const List<String> supportedLanguages = ['zh', 'en', 'de'];

  // 私有构造函数
  LanguageManager._internal();

  /// 获取单例实例
  static LanguageManager get instance {
    _instance ??= LanguageManager._internal();
    return _instance!;
  }

  /// 初始化语言管理器
  /// 应用启动时调用，会自动检查本地存储的语言设置
  Future<void> initialize() async {
    final prefs = await SharedPreferences.getInstance();
    final savedLanguage = prefs.getString(_languageKey);

    debugPrint('🔍 LanguageManager: 初始化开始');
    debugPrint('🔍 LanguageManager: 本地保存的语言: $savedLanguage');

    if (savedLanguage != null && savedLanguage.isNotEmpty) {
      // 如果本地有保存的语言设置，使用本地设置
      _currentLanguage = savedLanguage;
      _currentLocale = _parseLanguageToLocale(savedLanguage);
      debugPrint('🔍 LanguageManager: 使用本地保存的语言: $_currentLanguage');
    } else {
      // 如果是第一次打开，根据系统语言智能选择默认语言
      final systemLocale = ui.window.locale;
      final systemLanguage = systemLocale.languageCode;

      debugPrint('🔍 LanguageManager: 系统语言: $systemLanguage');
      debugPrint('🔍 LanguageManager: 系统Locale: $systemLocale');

      // 智能语言选择逻辑
      String selectedLanguage = _getDefaultLanguageBySystem(systemLanguage);

      _currentLanguage = selectedLanguage;
      _currentLocale = _parseLanguageToLocale(selectedLanguage);

      debugPrint('🔍 LanguageManager: 选择的默认语言: $_currentLanguage');
      debugPrint('🔍 LanguageManager: 生成的Locale: $_currentLocale');

      // 保存到本地
      await _saveLanguageToLocal(selectedLanguage);
      debugPrint('🔍 LanguageManager: 语言设置已保存到本地');
    }

    debugPrint('🔍 LanguageManager: 初始化完成 - 当前语言: $_currentLanguage, 当前Locale: $_currentLocale');
  }

  /// 根据系统语言智能选择默认语言
  /// 所有系统默认使用英文
  String _getDefaultLanguageBySystem(String systemLanguage) {
    // 统一使用英文作为默认语言
    return 'en';
  }

  /// 获取当前语言代码
  String get currentLanguage => _currentLanguage;

  /// 获取当前Locale对象
  Locale get currentLocale => _currentLocale;

  /// 设置语言
  /// [languageCode] 语言代码，如 'zh', 'en', 'de' 等
  /// [countryCode] 国家代码，如 'CN', 'US', 'DE' 等，可选
  Future<void> setLanguage(String languageCode, [String? countryCode]) async {
    _currentLanguage = languageCode;
    _currentLocale = Locale(languageCode, countryCode);

    // 保存到本地
    await _saveLanguageToLocal(languageCode);
  }

  /// 获取系统当前语言
  static String getSystemLanguage() {
    return ui.window.locale.languageCode;
  }

  /// 获取系统当前Locale
  static Locale getSystemLocale() {
    return ui.window.locale;
  }

  /// 检查是否为中文
  bool get isChinese => _currentLanguage == 'zh';

  /// 检查是否为英文
  bool get isEnglish => _currentLanguage == 'en';

  /// 检查是否为德语
  bool get isGerman => _currentLanguage == 'de';

  /// 检查是否为日文
  bool get isJapanese => _currentLanguage == 'ja';

  /// 获取当前语言的显示名称
  String get currentLanguageDisplayName {
    switch (_currentLanguage) {
      case 'zh':
        return 'Chinese';
      case 'en':
        return 'English';
      case 'de':
        return 'Deutsch';
      default:
        return 'Unknown';
    }
  }

  /// 保存语言到本地存储
  Future<void> _saveLanguageToLocal(String languageCode) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString(_languageKey, languageCode);
  }

  /// 将语言代码转换为Locale对象
  Locale _parseLanguageToLocale(String languageCode) {
    switch (languageCode) {
      case 'zh':
        return const Locale('zh', 'CN');
      case 'en':
        return const Locale('en', 'US');
      case 'de':
        return const Locale('de', 'DE');
      case 'ja':
        return const Locale('ja', 'JP');
      case 'ko':
        return const Locale('ko', 'KR');
      case 'fr':
        return const Locale('fr', 'FR');
      case 'es':
        return const Locale('es', 'ES');
      case 'it':
        return const Locale('it', 'IT');
      case 'ru':
        return const Locale('ru', 'RU');
      case 'ar':
        return const Locale('ar', 'SA');
      default:
        return const Locale('en', 'US'); // 默认英文
    }
  }

  /// 清除本地语言设置
  /// 下次启动时会重新根据系统语言智能选择
  Future<void> clearLocalLanguage() async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.remove(_languageKey);
    debugPrint('🔍 LanguageManager: 本地语言设置已清除');
  }

  /// 强制设置为英文（用于测试和重置）
  Future<void> forceSetEnglish() async {
    debugPrint('🔍 LanguageManager: 强制设置为英文');
    await setLanguage('en', 'US');
  }

  /// 重置为系统智能选择的语言
  Future<void> resetToSystemLanguage() async {
    final systemLocale = ui.window.locale;
    final systemLanguage = systemLocale.languageCode;

    debugPrint('🔍 LanguageManager: 重置为系统语言 - 系统语言: $systemLanguage');
    final selectedLanguage = _getDefaultLanguageBySystem(systemLanguage);
    await setLanguage(selectedLanguage);
  }

  /// 获取支持的语言列表
  static List<String> getSupportedLanguages() {
    return supportedLanguages;
  }

  /// 检查语言是否被支持
  static bool isLanguageSupported(String languageCode) {
    return supportedLanguages.contains(languageCode);
  }
}